混合(Blending)
混合用于透明或半透明物体
当图形呈现之后,所有着色器已经执行并应用到所有纹理时,像素被绘制到屏幕。他们如何结合由混合命令控制。
语法:
Blend Off: 关闭混合
Blend SrcFactor DstFactor: 启用混合。生成的颜色乘以 SrcFactor。已经在屏幕上的颜色乘以 DstFactor 和两个加在一起。
Blend SrcFactor DstFactor, ScrFactorA DstFactorA: 后面两个参数是Alpha通道的混合因子
BlendOp BlendOp: 非颜色混合操作
混合操作
可以使用以下的混合运算
操作符 | 说明 |
---|---|
Add | 源和目标叠加 |
Sub | 从源减去目标 |
RevSub | 从目标减去源 |
Min | 使用目标和源中较小的那一个 |
Max | 使用目标和源中较大的那一个 |
混合因子
所有以下属性都是有效的混合命令在两个 SrcFactor & DstFactor。源是指计算颜色,目的地是已经在屏幕上的颜色。如果 BlendOp 用逻辑操作,则将忽略混合因子。
因子 | 说明 |
---|---|
One | 让源或目标颜色完全通过。 |
Zero | 删除源或目标的值。 |
SrcColor | 这个阶段的值乘以源颜色值。 |
SrcAlpha | 这个阶段的值乘以源 alpha 值。 |
DstColor | 这个阶段的值乘以帧缓冲源颜色值。 |
DstAlpha | 这个阶段的值乘以帧缓冲 alpha 值。 |
OneMinusSrcColor | 1 - 源颜色值 |
OneMinusSrcAlpha | 1 - 源 alpha 值 |
OneMinusDstColor | 1 - 目标颜色值 |
OneMinusDstAlpha | 1 - 目标 alpha 值 |
细节
下面是最常见的混合类型:
Blend SrcAlpha OneMinusSrcAlpha // Alpha 混合
Blend One One // 叠加
Blend OneMinusDstColor One // 软叠加
Blend DstColor Zero // 乘法
Blend DstColor SrcColor // 2 倍乘法
示例
叠加一个纹理到屏幕
Shader "Simple Additive"
{
Properties
{
_MainTex ("MainTex", 2D) = ""{}
}
SubShader
{
Tags { "Queue"="Transparent" }
Pass
{
Blend One One
SetTexture [_MainTex] { combine Texture }
}
}
}
🔚